package com.cskaoyan.javase.oop3.innerclazz6.introduction1;

/**
 * @description: 引入内部类
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/


import sun.util.cldr.CLDRLocaleDataMetaInfo;

/**
 * > 引入
 * > 我们现在做一个应用程序，需要描述一台电脑（Computer）中的CPU，对于电脑而言
 * > 该怎么去描述这个CPU呢？
 *  1,电脑本身有CPU,IO设备,存储设备等等很多硬件资源共同组成的
 *  2,其中CPU占据绝对重要的地位,CPU可以调控计算机内部的所有硬件资源
 *      CPU自身也是有很多行为的,这里CPU最好是一个类
 *      并且CPU很重要,需要严格保护在电脑的内部,加一个访问权限private
 *      CPU是不能脱离计算机而存在的,否则没有太大意义
 *      希望在计算机Computer类外部无法创建CPU对象
 *
 *
 *      以上,按照我们现在的知识,是做不到让外部无法创建CPU对象
 *      这个时候你就想,为什么做不到?因为class CPU是一个独立的类,访问权限是默认的
 *      如果能够让这类具有private的访问权限 那就好了
 *
 *      于是只能把CPU这个类放进Computer类的肚子中,这个时候这个类处在Computer类的成员位置
 *      这个时候它就相当于电脑类的成员,于是它就有了访问权限
 *
 * - 它有存储设备，IO设备等等很多硬件资源组件
 * - CPU是电脑中最重要的组件
 *
 *> 内部类的定义
 * - 在Java语言中类可以嵌套定义，内部类（inner class）是定义在另一类当中的类
 * 并且可以无限嵌套,但是注意 一般嵌套一层足够使用,不要搞骚操作
 *
 * 成员内部类的分类:
 * 按照内部类处在类中的位置给内部类分类:
 * 1.成员内部类: 普通成员内部类,静态成员内部类
 * 2,局部内部类: 普通的局部内部类,特殊的:匿名内部类
 *
 * - 内部类是典型的，Java从C++中拿过来但是没有经过简化的特性
 *   - 也就是说Java几乎照搬了C++中的内部类
 *   - 通过内部类可以稍微感受一下C++的语法复杂性
 *
 * - 为了上课方便，我们需要统一口径，在内部类课程当中，我们统一规定
 *   - 像Cpu这种类我们称之为内部类（inner class）
 *   - Computer这种类我们称之为外围类（enclosed class）
 *   - Demo这种类我们称之为外部类（outside class）
 *
 */
public class Demo {
    public static void main(String[] args) {
        Computer c = new Computer();
        //c.c
        //Cpu cpu = new Cpu();
    }
}
class Computer{
    //存储设,IO设备等
  private Cpu cpu = new Cpu();

  private class Cpu{


    }
}
//显然这里是不可能直接加private的,因为私有是有对象的,对谁私有
//一个独立的类,不可能有对象让它私有
//所以要把这个类 变成不独立的类,把这个类放进别的类的肚子里
//private class CPU{
//    //寄存器等
//    //行为
//}

